#ifndef CONEXION_H
#define	CONEXION_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> 
#include "Thread.h"
#include "Excepcion.h"
#include "IMensajero.h"
#include "IManejadorConexionEvento.h"

using namespace TP;
using namespace TP::Threading;
using namespace TP::Comunicacion::Eventos;

namespace TP { namespace Comunicacion{

    class Conexion {
    
    public:
        
        Conexion(const string& pIp, const string& pPuerto);
        
        virtual ~Conexion();
        
        virtual void Iniciar() throw (Excepcion&);
        
        virtual void Finalizar() throw (Excepcion&);
        
        virtual int Escribir(const string& pMensaje) throw (Excepcion&);
        
        virtual int Leer (string& pMensaje) throw (Excepcion&);
        
    private:
        string ip;
        string puerto;
        bool ConexionPerdida;
        int sockfd; /* descriptor a usar con el socket */
    };
}}

#endif	/* CONEXION_H */

